package trabalho.das.fxml.views.controladores;

import comandos.ComandoApagarFamilia;
import comandos.ComandoEditarFamilia;
import comandos.GestorDeComandos;
import entidades.Cor;
import entidades.Estilo;
import entidades.Familia;
import entidades.Textura;
import java.io.File;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ColorPicker;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.paint.Color;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import org.omg.CORBA.INITIALIZE;
import sistema.Sistema;

/**
 * Trabalho DAS - 2014/2015
 *
 * @author a21210380, a21190325, a21210392
 */
public class ControladorVerTodasAsFamilias implements Initializable {

    @FXML
    private TextField nomeFamilia;

    @FXML
    private ColorPicker corLinhaPicker;

    @FXML
    private ColorPicker corTextoPicker;

    @FXML
    private TextField caminhoFicheiro;

    @FXML
    private ListView<Familia> listaFamilias;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        listaFamilias.getItems().addAll(Sistema.getInstance().getFamilias().values());

        listaFamilias.getSelectionModel().selectedItemProperty().addListener((ObservableValue<? extends Familia> observable, Familia oldValue, Familia newValue) -> {
            if (newValue != null) {
                nomeFamilia.setText(newValue.getNome());
                Cor corLinha = newValue.getCorLinhaDefault();
                Cor corTexto = newValue.getCorTextoDefault();
                corLinhaPicker.setValue(new Color(corLinha.getRed(), corLinha.getGreen(), corLinha.getBlue(), corLinha.getOpacity()));
                corTextoPicker.setValue(new Color(corTexto.getRed(), corTexto.getGreen(), corTexto.getBlue(), corTexto.getOpacity()));
                caminhoFicheiro.setText(newValue.getFundoDefault().getCaminhoDoFicheiro());
            }
        });
    }

    @FXML
    private void onProcurarFicheiroPressionado(ActionEvent event) {
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle("Open Resource File");
        fileChooser.getExtensionFilters().addAll(
                new FileChooser.ExtensionFilter("All Images", "*.*"),
                new FileChooser.ExtensionFilter("jpg", "*.jpg"),
                new FileChooser.ExtensionFilter("png", "*.png")
        );
        File fileSelected = fileChooser.showOpenDialog(((Stage) nomeFamilia.getScene().getWindow()));
        if (fileSelected == null) {
            System.out.println("No File Selected!");
            return;
        }

        caminhoFicheiro.setText(fileSelected.getAbsolutePath());
    }

    @FXML
    private void onEditarFamiliaPressionado(ActionEvent event) {
        if (listaFamilias.getSelectionModel().getSelectedItem() != null) {
            Familia oldFamilia = listaFamilias.getSelectionModel().getSelectedItem();

            Textura novaTextura = null;
            Cor novaCorLinha = Sistema.getInstance().getCor(corLinhaPicker.getValue().getRed(), corLinhaPicker.getValue().getGreen(), corLinhaPicker.getValue().getBlue(), corLinhaPicker.getValue().getOpacity());
            Cor novaCorTexto = Sistema.getInstance().getCor(corTextoPicker.getValue().getRed(), corTextoPicker.getValue().getGreen(), corTextoPicker.getValue().getBlue(), corTextoPicker.getValue().getOpacity());
            if (!caminhoFicheiro.getText().equals(oldFamilia.getFundoDefault().getCaminhoDoFicheiro())) {
                novaTextura = new Textura(oldFamilia.getFundoDefault().getZ(), caminhoFicheiro.getText());
            } else {
                novaTextura = oldFamilia.getFundoDefault();
            }
            Familia novaFamilia = new Familia(nomeFamilia.getText(), novaCorLinha, novaCorTexto, novaTextura);

            ComandoEditarFamilia c = new ComandoEditarFamilia(novaFamilia, oldFamilia);
            Sistema.getInstance().getGestorComandos().executeComando(c);
            ((Stage) nomeFamilia.getScene().getWindow()).close();
        }
    }

    @FXML
    private void onEliminarFamiliaPressionado(ActionEvent event) {
        if (listaFamilias.getSelectionModel().getSelectedItem() != null) {
            Familia selectedFamilia = listaFamilias.getSelectionModel().getSelectedItem();
            ComandoApagarFamilia c = new ComandoApagarFamilia(selectedFamilia);
            Sistema.getInstance().getGestorComandos().executeComando(c);
            ((Stage) nomeFamilia.getScene().getWindow()).close();
        }
    }
}
